﻿Imports Microsoft.Reporting.WinForms

Public Class VerReporte

    Private oMaestra As New CMaestras
    Private dtEnc As New DataTable
    Private dtTotales As New DataTable
    Public ds As DataSet
    Public numeroReporte As Integer
    Public fechaReporte As Date
    Public fechaVencimiento As Date
    Public idAgente As Integer
    Public fechaDesde As Date
    Public fechaHasta As Date
    Public tasa As Double
    Public tipoGuia As String

    Private Sub VerReporte_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            Me.CalcularPesos()
            Me.CalcularTotales()
            Me.LlenarEncabezado()
            Me.ImprimirReporte()
        Catch ex As Exception
            MessageBox.Show("No se puede mostrar el reporte: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    ''' <summary>
    ''' Calcula los valores de los items en dolares, y renombra las columnas de la tabla para que queden iguales al xsd
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub CalcularPesos()
        Me.ds.Tables(0).Columns.Add("FLETEPESOS")
        Me.ds.Tables(0).Columns.Add("DUEAGENTPESOS")
        Me.ds.Tables(0).Columns.Add("DUECARRIERPESOS")        
        For i As Integer = 0 To Me.ds.Tables(0).Rows.Count - 1
            Me.ds.Tables(0).Rows(i)("FLETEPESOS") = CDbl(Me.ds.Tables(0).Rows(i)("FLETEDOLARES").ToString()) * CDbl(Me.ds.Tables(0).Rows(i)("TASA").ToString())
            Me.ds.Tables(0).Rows(i)("DUEAGENTPESOS") = CDbl(Me.ds.Tables(0).Rows(i)("DUEAGENTDOLARES").ToString()) * CDbl(Me.ds.Tables(0).Rows(i)("TASA").ToString())
            Me.ds.Tables(0).Rows(i)("DUECARRIERPESOS") = CDbl(Me.ds.Tables(0).Rows(i)("DUECARRIERDOLARES").ToString()) * CDbl(Me.ds.Tables(0).Rows(i)("TASA").ToString())
        Next
    End Sub

    Private Sub CalcularTotales()
        dtTotales.Columns.Add("FLETEDOLARES")
        dtTotales.Columns.Add("FLETEPESOS")
        dtTotales.Columns.Add("DUEAGENTDOLARES")
        dtTotales.Columns.Add("DUEAGENTPESOS")
        dtTotales.Columns.Add("DUECARRIERDOLARES")
        dtTotales.Columns.Add("DUECARRIERPESOS")

        Dim dr As DataRow
        dr = dtTotales.NewRow()
        dr("FLETEDOLARES") = 0
        dr("FLETEPESOS") = 0
        dr("DUEAGENTDOLARES") = 0
        dr("DUEAGENTPESOS") = 0
        dr("DUECARRIERDOLARES") = 0
        dr("DUECARRIERPESOS") = 0
        For i As Integer = 0 To Me.ds.Tables(0).Rows.Count - 1
            dr("FLETEDOLARES") += CDbl(Me.ds.Tables(0).Rows(i)("FLETEDOLARES").ToString())
            dr("FLETEPESOS") += CDbl(Me.ds.Tables(0).Rows(i)("FLETEPESOS").ToString())
            dr("DUEAGENTDOLARES") += CDbl(Me.ds.Tables(0).Rows(i)("DUEAGENTDOLARES").ToString())
            dr("DUEAGENTPESOS") += CDbl(Me.ds.Tables(0).Rows(i)("DUEAGENTPESOS").ToString())
            dr("DUECARRIERDOLARES") += CDbl(Me.ds.Tables(0).Rows(i)("DUECARRIERDOLARES").ToString())
            dr("DUECARRIERPESOS") += CDbl(Me.ds.Tables(0).Rows(i)("DUECARRIERPESOS").ToString())
        Next
        dtTotales.Rows.Add(dr)
    End Sub

    ''' <summary>
    ''' Agrega al dataset la tabla del encabezaod y la llena con la información correspondiente
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub LlenarEncabezado()
        dtEnc.Columns.Add("NUMEROREPORTE")
        dtEnc.Columns.Add("FECHAREPORTE")
        dtEnc.Columns.Add("FECHAVENCIMIENTO")
        dtEnc.Columns.Add("AGENTENOMBRE")
        dtEnc.Columns.Add("AGENTECIUDAD")
        dtEnc.Columns.Add("AGENTENIT")
        dtEnc.Columns.Add("AGENTEDIRECCION")
        dtEnc.Columns.Add("PERIODO")
        dtEnc.Columns.Add("TELEFONO")
        dtEnc.Columns.Add("COMISIONTEXTO")
        dtEnc.Columns.Add("COMISIONVALOR")
        dtEnc.Columns.Add("IVA")
        dtEnc.Columns.Add("COMISIONZARATRANSTEXTO")
        dtEnc.Columns.Add("COMISIONZARATRANSVALOR")
        dtEnc.Columns.Add("RETEFUENTETEXTO")
        dtEnc.Columns.Add("RETEFUENTEVALOR")
        dtEnc.Columns.Add("RETEICATEXTO")
        dtEnc.Columns.Add("RETEICAVALOR")
        dtEnc.Columns.Add("RETEIVATEXTO")
        dtEnc.Columns.Add("RETEIVAVALOR")
        dtEnc.Columns.Add("SUBTOTALIZQUIERDA2")
        dtEnc.Columns.Add("COMISIONNETAIZQUIERDA")
        dtEnc.Columns.Add("FLETETEXTO")
        dtEnc.Columns.Add("FLETEVALOR")
        dtEnc.Columns.Add("DUETEXTO")
        dtEnc.Columns.Add("DUEVALOR")
        dtEnc.Columns.Add("SUBTOTALDERECHATEXTO")
        dtEnc.Columns.Add("SUBTOTALDERECHAVALOR")
        dtEnc.Columns.Add("COMISIONNETADERECHATEXTO")
        dtEnc.Columns.Add("COMISIONNETADERECHAVALOR")
        dtEnc.Columns.Add("TOTALTEXTO")
        dtEnc.Columns.Add("TOTALVALOR")
        dtEnc.Columns.Add("ELABORADOPOR")
        dtEnc.Columns.Add("TIPOGUIA")

        Dim dr As DataRow = dtEnc.NewRow()
        dr("NUMEROREPORTE") = Me.numeroReporte
        dr("FECHAREPORTE") = Me.fechaReporte.ToString("MMM d yyyy")
        dr("FECHAVENCIMIENTO") = Me.fechaVencimiento.ToString("MMM d yyyy")

        'Se obtienen los datos del agente
        dr("AGENTENOMBRE") = ""
        dr("AGENTECIUDAD") = ""
        dr("AGENTENIT") = ""
        dr("AGENTEDIRECCION") = ""
        Dim dsAgente = Me.oMaestra.GetAgenteById(Me.idAgente)
        If (dsAgente.Tables(0).Rows.Count > 0) Then
            dr("AGENTENOMBRE") = dsAgente.Tables(0).Rows(0)("AGENTE")
        End If

        dr("PERIODO") = "Período: De " + Me.fechaDesde.ToString("MMM d yyyy") + " hasta " + Me.fechaHasta.ToString("MMM d yyyy")
        dr("COMISIONTEXTO") = "5% Comision sobre (" & Me.dtTotales.Rows(0)("FLETEPESOS").ToString() & ")cop"
        dr("COMISIONVALOR") = CInt(CInt(Me.dtTotales.Rows(0)("FLETEPESOS").ToString()) * 0.05)
        dr("IVA") = CInt((CDbl(Me.dtTotales.Rows(0)("FLETEPESOS").ToString()) * 0.05) * 0.16)
        dr("COMISIONZARATRANSVALOR") = CInt(dr("COMISIONVALOR")) + CInt(dr("IVA"))
        dr("RETEFUENTETEXTO") = "Rete fuente " & dr("COMISIONVALOR").ToString()
        dr("RETEFUENTEVALOR") = CInt(CInt(dr("COMISIONVALOR").ToString()) * 0.11)

        'Telefono es siempre fijo, dependdiendo del tipo de guia
        If (Me.tipoGuia = "PREPAID") Then
            dr("TELEFONO") = "TEL: 4138120"
            dr("COMISIONZARATRANSTEXTO") = "SubTotal"
            dr("RETEIVATEXTO") = "Rte Iva 50%   " & dr("IVA").ToString()
            dr("RETEIVAVALOR") = CInt(CInt(dr("IVA").ToString()) * 0.5)
            dr("RETEICATEXTO") = "Rte Ica 9.66   " & dr("COMISIONVALOR").ToString()
            dr("RETEICAVALOR") = CInt(dr("COMISIONVALOR").ToString() * 0.00966)
            dr("SUBTOTALIZQUIERDA2") = CInt(dr("RETEFUENTEVALOR")) + CInt(dr("RETEIVAVALOR")) + CInt(dr("RETEICAVALOR"))
            dr("COMISIONNETAIZQUIERDA") = CInt(CInt(dr("COMISIONZARATRANSVALOR")) - CInt(dr("SUBTOTALIZQUIERDA2")))
            dr("FLETETEXTO") = "FLETE"
            dr("FLETEVALOR") = CInt(Me.dtTotales.Rows(0)("FLETEPESOS"))
            dr("DUETEXTO") = "DUE CARRIER"
            dr("DUEVALOR") = CInt(Me.dtTotales.Rows(0)("DUECARRIERPESOS"))
            dr("SUBTOTALDERECHATEXTO") = "SUBTOTAL"
            dr("SUBTOTALDERECHAVALOR") = CInt(CInt(dr("FLETEVALOR")) + CInt(dr("DUEVALOR")))
            dr("COMISIONNETADERECHATEXTO") = "COMISIÓN NETA"
            dr("COMISIONNETADERECHAVALOR") = CInt(dr("COMISIONNETAIZQUIERDA"))
            dr("TOTALTEXTO") = "TOTAL A FAVOR DE " & dr("AGENTENOMBRE")
            dr("TOTALVALOR") = CInt(CInt(dr("SUBTOTALDERECHAVALOR")) - CInt(dr("COMISIONNETADERECHAVALOR")))
        Else
            dr("TELEFONO") = "TEL: 2966630"
            dr("COMISIONZARATRANSTEXTO") = "Comisión Zaratrans"
            dr("RETEIVATEXTO") = ""
            dr("RETEIVAVALOR") = ""
            dr("RETEICATEXTO") = ""
            dr("RETEICAVALOR") = ""
            dr("SUBTOTALIZQUIERDA2") = ""
            dr("COMISIONNETAIZQUIERDA") = CInt(CInt(dr("COMISIONZARATRANSVALOR")) - CInt(dr("RETEFUENTEVALOR")))
            dr("FLETETEXTO") = ""
            dr("FLETEVALOR") = ""
            dr("DUETEXTO") = "DUE AGENT"
            dr("DUEVALOR") = CInt(Me.dtTotales.Rows(0)("DUEAGENTPESOS"))
            dr("SUBTOTALDERECHATEXTO") = "COMISION NETA"
            dr("SUBTOTALDERECHAVALOR") = CInt(dr("COMISIONNETAIZQUIERDA"))
            dr("COMISIONNETADERECHATEXTO") = ""
            dr("COMISIONNETADERECHAVALOR") = ""
            dr("TOTALTEXTO") = "TOTAL A FAVOR DE ZARATRANS S.A.S"
            dr("TOTALVALOR") = CInt(CInt(dr("DUEVALOR")) + CInt(dr("SUBTOTALDERECHAVALOR")))
        End If

        dr("ELABORADOPOR") = My.Forms.Principal.NombreUsuario
        dr("TIPOGUIA") = Me.tipoGuia

        Me.dtEnc.Rows.Add(dr)
    End Sub

    Private Sub ImprimirReporte()
        Me.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
        Dim rep As LocalReport = Me.ReportViewer1.LocalReport
        rep.ReportEmbeddedResource = "Facturacion.ReporteGuias.rdlc"

        Dim rptDataSource As New ReportDataSource
        rptDataSource.Name = "dsReporteGuia_ENCABEZADO"
        rptDataSource.Value = Me.dtEnc

        Dim rptDsItems As New ReportDataSource
        rptDsItems.Name = "dsReporteGuia_DETALLE"
        rptDsItems.Value = ds.Tables(0)

        Dim rptTotales As New ReportDataSource
        rptTotales.Name = "dsReporteGuia_TOTALES"
        rptTotales.Value = Me.dtTotales

        rep.DataSources.Clear()
        rep.DataSources.Add(rptDataSource)
        rep.DataSources.Add(rptDsItems)
        rep.DataSources.Add(rptTotales)
        Me.ReportViewer1.LocalReport.Refresh()
        Me.ReportViewer1.Visible = True
        Me.ReportViewer1.RefreshReport()
    End Sub
End Class